package com.shujia

object Code05Fun {
  /**
   * def 表示函数的标记关键字
   * main 表示函数名
   * args 表示参数名
   * Array[String] 表示参数类型
   * Unit = 表示返回值为空
   * @param args
   */
  def main(args: Array[String]): Unit = {
    fun()
    fun1(10,"*")
    val res: Int = fun2(20)
    println(res)
//    val unit: Int = fun3(10)


    // 对于Scala来说，函数没有参数可以省略其 ()
    fun

    /**
     * 函数的省略原则：
     *      ① return 关键字可以省略 ，返回值类型可以自动推断，但是最好全部为简略写法
     *      ② 如果函数体只有一行代码，可以省略花括号
     *      ③ 函数没有参数时，可以省略其 ()  
     *
     *
     */

    val i: Int = fun4(10)

    println(fun4(10))

//    val unit: Unit = fun5(10)



  }


  def fun(): Unit = {
    println("this is Unit fun")
  }

  def fun1(a:Int,b:String): Unit = {
    if (b == "*"){
      println(a * a)
    }else{
      println(a)
    }
  }

  def fun2(a:Int): Int = {
    a * a
  }

  def fun3(a: Int):Int ={
    //
    return a * a
  }

  def fun4(a: Int) =  a * a


  def fun5(a: Int): Unit = {
    //
    a * a
  }

  def fun6: Unit = {
    println("this is Unit fun")
  }


}
